#ifndef BASEMODEL_SERVER_RESPONSE_H
#define BASEMODEL_SERVER_RESPONSE_H

#include "../common.h"

// 最大工具数量定义
#define MAX_TOOLS_COUNT 32
#define MAX_PROPERTIES_SIZE 512
#define MAX_REQUIRED_COUNT 16

// JSON-RPC错误信息
typedef struct {
    double code;                // 错误代码
    error_msg_t message;        // 错误信息描述
    bool has_data;              // 是否包含详细数据
    string_t data;              // 可选的错误详细数据
} error_t;

// MCP服务器能力描述
typedef struct {
    char tools[MAX_PROPERTIES_SIZE]; // 工具能力配置（JSON字符串格式）
} capabilities_t;

// MCP服务器信息
typedef struct {
    name_t name;                // 服务器名称
    version_t version;          // 服务器版本
} server_info_t;

// MCP初始化结果
typedef struct {
    version_t protocol_version; // MCP协议版本，如"2024-11-05"
    capabilities_t capabilities; // 服务器能力
    server_info_t server_info;  // 服务器信息
} initialize_result_t;

// MCP初始化响应载荷
typedef struct {
    jsonrpc_version_t jsonrpc;  // JSON-RPC协议版本，固定为JSONRPC_VERSION_2_0
    double id;                  // 请求ID
    initialize_result_t result; // 初始化结果
    bool has_error;             // 是否包含错误信息
    error_t error;              // 可选的错误信息
} initialize_payload_t;

// MCP初始化响应消息
typedef struct {
    msg_type_t type;                // 消息类型，固定为MSG_TYPE_MCP
    session_id_t session_id;        // 会话ID
    initialize_payload_t payload;   // JSON-RPC载荷
} mcp_initialize_resp_t;

// 工具输入参数的JSON Schema定义
typedef struct {
    string_t type;              // Schema类型，通常为"object"
    char properties[MAX_PROPERTIES_SIZE]; // 参数属性定义（JSON字符串格式）
    int32_t required_count;     // 必需参数数量
    string_t required[MAX_REQUIRED_COUNT]; // 必需参数列表
} input_schema_t;

// MCP工具定义
typedef struct {
    name_t name;                    // 工具名称，如"take_photo"、"set_volume"等
    description_t description;      // 工具描述和用法说明
    input_schema_t input_schema;    // 输入参数Schema
} tool_t;

// 工具列表结果
typedef struct {
    int32_t tools_count;        // 工具数量
    tool_t tools[MAX_TOOLS_COUNT]; // 可用工具列表
} tools_list_result_t;

// 工具列表响应载荷
typedef struct {
    jsonrpc_version_t jsonrpc;  // JSON-RPC协议版本，固定为JSONRPC_VERSION_2_0
    double id;                  // 请求ID
    tools_list_result_t result; // 工具列表结果
    bool has_error;             // 是否包含错误信息
    error_t error;              // 可选的错误信息
} tools_list_payload_t;

// MCP工具列表响应消息
typedef struct {
    msg_type_t type;                // 消息类型，固定为MSG_TYPE_MCP
    session_id_t session_id;        // 会话ID
    tools_list_payload_t payload;   // JSON-RPC载荷
} mcp_tools_list_resp_t;

#endif // BASEMODEL_SERVER_RESPONSE_H
